//: [Previous](@previous)
/*:
 # 常量
 ## 1. 只能赋值1次
 - let a: Int = 10
 ## 2. 它的值不要求在编译时期确定,但使用之前必须赋值1次
 - let a: Int
 - a = 10
 ## 常量/变量在初始化之前,都不能使用
 */
//: [Next](@next)

/*:
 ## 定义方法
 */
func getAge() -> Int {
    return 31
}

/*:
 标识符(比如常量名,变量名,函数名)几乎可以使用任何字符
 标识符不能以数字开头,不能包含空白字符,制表符,箭头等特殊字符
 */

func 🐂🍺() {
    print("666")
}
let 👽 = "ET"
/*:
 ## 常见的数据类型
 1. 值类型(value type)
 - 枚举(enum):Optional
 - 结构体(struct):Bool,Int,Float,Double,Character,String,Array,Dictionary,Set
 2. 引用类型(reference type)
 - 类(class)
 */
//: ## 整数类型
//Int8:占8位,占1个字节
//Int16:占16位,占2个字节
//Int32:占32位,占4个字节
//Int64:占64位,占8个字节
////U开头的也一样,U只是代表无符号Unsigned
//UInt8
//UInt16
//UInt32
//UInt64

// 在32bit平台,Int等价于Int32;在64位平台,Int等价于Int64,就是说一个Int占用8个字节

// 整数的最值: UInt8.max,Int16.min
print(UInt8.max) // 255, 意思就是UInt8的取值范围是0~255
//一般情况下,都是直接用Int即可

// 浮点类型:Float,32位,精度只有6位; Double,64位,精度至少15位
let number = 30.0 //默认情况下,系统默认是Double类型
let number2: Float = 30.0 //需要float的情况下,要特别标明


//: ## 字面量
//布尔
let bool = true //这种直接写出来的值(true),这种就是字面量
//字符串
let string = "浩哥"
//字符 (可存储ASCII字符,Unicode字符),字符的初始化一定要标明类型,不然系统会自动默认为字符串
let character: Character = "🐱"
//数组
let array = [1,2,3]
//创建数组,里面装的都是Int类型,下面2种方法都完全一样的效果
var ints1 = Array<Int>()
var ints2 = [Int]()
ints1.append(10)//数组的拼接
//数组的遍历
for (idx, element) in array.enumerated() {
    print((idx, element))
    if idx == 1 {
        break
    }
}

//字典
let dictionary = ["age" : 18, "height" : 168, "weight" : 120]
//创建字典,key是int,value是String,下面2种方法都完全一样的效果
var dict1 = Dictionary<Int,String>()
var dict2 = [Int : String]()
//:## 类型转换
// 整数/浮点数转换
let int = 3
let double = 0.14159
let pi = Double(int) + double
let intpi = Int(pi)
// 字面量可以直接相加,因为数字字面量本身没有明确的类型
let result = 3 + 0.14159
//: ## 元祖(tuple)
// 元祖:将多种数据类型整合在一起,赋值给一个变量.就是小括号,里面接上内容,比如可以用作接受后台服务器接口返回的状态码,一般是404加上错误内容.这种时候一个元祖就可以直接接受
let http404Error = (404, "Not Found")
//元祖中的值,取出来有2种方法,第一种,利用数字序号,比如元祖名称.0,元祖名称.1
print(http404Error.0)
print(http404Error.1)
//也可以把一个已经存在的元祖常量或者变量,赋值给一个新的元祖(对应的数据写有名称),直接拿出里面的数据去用.这样子就可以直接拿出状态码和错误内容了
let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")
print("The status Message is \(statusMessage)")
//可以用无符号去接受不需要的值
let (statusCode1, _) = http404Error
//元祖中的值,取出来有2种方法,第二种,创建的时候给名称标签
let http200Status = (statusCode2: 200, description: "成功")
print(http200Status.statusCode2)
print(http200Status.description)


